package com.it.you.base.designmode.singleton;

import java.util.concurrent.atomic.AtomicLong;

/**
 * SingletonHolder 是一个静态内部类，当外部类 IdGenerator_NeiBuNei 被加载的时候，并不会创建
 * SingletonHolder 实例对象。只有当调用 getInstance() 方法时，SingletonHolder 才会
 * 被加载，这个时候才会创建 instance。instance 的唯一性、创建过程的线程安全性，都由
 * JVM 来保证。所以，这种实现方法既保证了线程安全，又能做到延迟加载。
 */
public class IdGenerator_NeiBuNei {

    private AtomicLong id = new AtomicLong(0);

    private IdGenerator_NeiBuNei() {
    }

    public static IdGenerator_NeiBuNei getInstance() {
        return SingletonHolder.instance;
    }

    public long getId() {
        return id.incrementAndGet();
    }

    private static class SingletonHolder {
        private static final IdGenerator_NeiBuNei instance = new IdGenerator_NeiBuNei();
    }
}
